package com.anxinr.service.impl;

import com.anxinr.mapper.CommodityMapper;
import com.anxinr.mapper.ShopMapper;
import com.anxinr.pojo.base.QueryBase;
import com.anxinr.pojo.dto.CommodityDTO;
import com.anxinr.pojo.dto.ShopDTO;
import com.anxinr.pojo.entity.Commodity;
import com.anxinr.pojo.entity.Shop;
import com.anxinr.service.CommodityService;
import com.anxinr.service.ShopService;
import com.anxinr.util.RedisUtil;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.TimeUnit;

/**
 * @author anxinr
 */
@Service
public class CommodityServiceImpl extends ServiceImpl<CommodityMapper, Commodity> implements CommodityService {
    @Autowired
    private CommodityMapper commodityMapper ;

    @Autowired
    private StringRedisTemplate template ;

    /**
     * 查询该门店的商品
     * @param commodity
     * @return
     */
    @Override
    public PageInfo<CommodityDTO> queryCommodity(QueryBase<CommodityDTO> commodity) {
        /**分页开始*/
        PageHelper.startPage(commodity.getCurrentPage(),commodity.getSize()) ;
        List<CommodityDTO> list = commodityMapper.queryCommodity(commodity) ;
        PageInfo<CommodityDTO> info = new PageInfo<>(list,commodity.getSize()) ;
        return info;
    }

    /**
     * 新增门店商品
     * @param commodity
     */
    @Override
    public void addCommodity(CommodityDTO commodity) {
        /**
         * 很多个线程同时访问这个方法
         *
         * 设置一个key 用商品名称来表示
         *
         * */
        if (StringUtils.isBlank(template.opsForValue().get(commodity.getName()))){
            /**
             * 如果是空的  那么就表示 我是第一个执行的线程，我为了不然别人修改我的数据
             * 我给这个修改特定的数据添加一个key
             * 只有拿到这个key 才能对这个key 对应的数据进行修改
             * */
            template.opsForValue().set(commodity.getName(),"asdasd",60L, TimeUnit.SECONDS);
            /**继续执行*/
        }else {
            /**
             * 如果这个key 不是空的
             * 不能  代表不能继续修改  ，返回
             * */
            return;
        }


    }
}
